package utils

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"zinx/zinterface"
)

/*
	全局配置
*/

type GlobalObj struct {
	TCPServer zinterface.Zinterface // 服务器当前的连接句柄
	Name      string                // 服务器名称
	Host      string                // 当前监听的IP
	Port      int                   // 当前监听的端口

	Version        string // Zinx框架的版本号
	MaxConnection  int    // 最大支持的连接数量
	MaxPackageSize int    // 最大支持的数据包长度

}

// 对其他包提供全局对象
var GlobalObject *GlobalObj

// 读取config/zinx.json文件
// 将配置文件中的配置加载
func (g *GlobalObj) Reload() {
	fmt.Println("reading zinx.json config file")

	data, err := ioutil.ReadFile("config/zinx.json")
	if err != nil {
		fmt.Println("!!!ERROR reading zinx.json file")
		panic(err)
	}

	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		fmt.Println("!!!ERROR unmarshal json to globalobj")
		panic(err)
	}

	fmt.Println("finish reading zinx.json file")
}

// 初始化方法
func init() {
	fmt.Println("init zinx server...")
	GlobalObject = &GlobalObj{
		Name:           "Zinx Server",
		Host:           "0.0.0.0",
		Port:           8999,
		Version:        "v0.4",
		MaxConnection:  1000,
		MaxPackageSize: 4096,
	}

	// 加载配置文件
	GlobalObject.Reload()

	fmt.Printf("finish init!\n\n")
}
